#pragma once

#include <memory>
#include <boost/scoped_ptr.hpp>
#include <boost/signals2/signal.hpp>
#include "usb_device.h"

namespace dmcg {
namespace module {
namespace libusb {
class UsbMonitorPrivate;

class UsbMonitor
{
public:
    UsbMonitor();
    ~UsbMonitor();

    // 热插拔检测初始化
    void operator()();

    // 停止热插拔监听
    int stop_monitor();

    // usb设备插、拔信号
    boost::signals2::signal<int32_t(const std::string &, const std::vector<usb_device>&)> UsbDeviceAction;

    // 查找usb设备
    bool find_device(const usb_device &);

    // 获取当前USB设备数
    int count_devices();

    // 移除某个usb设备
    int remove_device(const usb_device &, const std::string &);

    // 移除所有usb设备
    int remove_all_device(const std::string &);

private:
    boost::scoped_ptr<UsbMonitorPrivate> d;
};

} // namespace libusb
} // namespace module
} // namespace dmcg
